package com.ecode.imecode;

import com.alibaba.fastjson.JSONObject;
import com.ecode.imecode.proto.Message;
import com.ecode.imecode.proto.MessageHeader;
import com.ecode.imecode.utils.MessageDecodeUtils;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;

import java.util.List;

/**
 * 对私有协议进行数据解码处理
 */
public class MessageDecode extends ByteToMessageDecoder {

    @Override
    protected void decode(ChannelHandlerContext channelHandlerContext,
                          ByteBuf byteBuf, List<Object> list) throws Exception {
        //请求头(指令 版本 clientType 消息解析类型(json/xml)  appId IMEI长度 bodyLen) 默认请求各个字段长度为4
        // 也就是最少要有4*7=28byte
        //请求体(IMEI + bodyData)
        if (byteBuf.readableBytes()<28) {
            return;
        }
        Message message = MessageDecodeUtils.getMessage(byteBuf);
        if (message == null) return;
        //讲解析后的数据 传递给下一个handler
        list.add(message);
    }
}
